home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / include / qtable.h.z / qtable.h
C/C++ Source or Header  |  2002-04-08  |  17KB  |  505 lines

  1. /****************************************************************************
  2. **
  3. ** Definition of QTable widget class
  4. **
  5. ** Created : 000607
  6. **
  7. ** Copyright (C) 1992-2000 Trolltech AS.  All rights reserved.
  8. **
  9. ** This file is part of the table module of the Qt GUI Toolkit.
  10. **
  11. ** This file may be distributed under the terms of the Q Public License
  12. ** as defined by Trolltech AS of Norway and appearing in the file
  13. ** LICENSE.QPL included in the packaging of this file.
  14. **
  15. ** This file may be distributed and/or modified under the terms of the
  16. ** GNU General Public License version 2 as published by the Free Software
  17. ** Foundation and appearing in the file LICENSE.GPL included in the
  18. ** packaging of this file.
  19. **
  20. ** Licensees holding valid Qt Enterprise Edition licenses may use this
  21. ** file in accordance with the Qt Commercial License Agreement provided
  22. ** with the Software.
  23. **
  24. ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
  25. ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  26. **
  27. ** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
  28. **   information about Qt Commercial License Agreements.
  29. ** See http://www.trolltech.com/qpl/ for QPL licensing information.
  30. ** See http://www.trolltech.com/gpl/ for GPL licensing information.
  31. **
  32. ** Contact info@trolltech.com if any conditions of this licensing are
  33. ** not clear to you.
  34. **
  35. **********************************************************************/
  36.  
  37. #ifndef QTABLE_H
  38. #define QTABLE_H
  39.  
  40. #ifndef QT_H
  41. #include <qscrollview.h>
  42. #include <qpixmap.h>
  43. #include <qptrvector.h>
  44. #include <qheader.h>
  45. #include <qmemarray.h>
  46. #include <qptrlist.h>
  47. #include <qguardedptr.h>
  48. #include <qshared.h>
  49. #include <qintdict.h>
  50. #include <qstringlist.h>
  51. #endif // QT_H
  52.  
  53.  
  54. #ifndef QT_NO_TABLE
  55.  
  56. class QTableHeader;
  57. class QValidator;
  58. class QTable;
  59. class QPaintEvent;
  60. class QTimer;
  61. class QResizeEvent;
  62. class QComboBox;
  63. class QCheckBox;
  64. class QDragObject;
  65.  
  66. struct QTablePrivate;
  67. struct QTableHeaderPrivate;
  68.  
  69.  
  70. class Q_EXPORT QTableSelection
  71. {
  72. public:
  73.     QTableSelection();
  74.     void init( int row, int col );
  75.     void expandTo( int row, int col );
  76.     bool operator==( const QTableSelection &s ) const;
  77.     bool operator!=( const QTableSelection &s ) const { return !(operator==(s)); }
  78.  
  79.     int topRow() const { return tRow; }
  80.     int bottomRow() const { return bRow; }
  81.     int leftCol() const { return lCol; }
  82.     int rightCol() const { return rCol; }
  83.     int anchorRow() const { return aRow; }
  84.     int anchorCol() const { return aCol; }
  85.  
  86.     bool isActive() const { return active; }
  87.  
  88. private:
  89.     uint active : 1;
  90.     uint inited : 1;
  91.     int tRow, lCol, bRow, rCol;
  92.     int aRow, aCol;
  93. };
  94.  
  95.  
  96. class Q_EXPORT QTableItem : public Qt
  97. {
  98.     friend class QTable;
  99.  
  100. public:
  101.     enum EditType { Never, OnTyping, WhenCurrent, Always };
  102.  
  103.     QTableItem( QTable *table, EditType et, const QString &text );
  104.     QTableItem( QTable *table, EditType et, const QString &text,
  105.                 const QPixmap &p );
  106.     virtual ~QTableItem();
  107.  
  108.     virtual QPixmap pixmap() const;
  109.     virtual QString text() const;
  110.     virtual void setPixmap( const QPixmap &p );
  111.     virtual void setText( const QString &t );
  112.     QTable *table() const { return t; }
  113.  
  114.     virtual int alignment() const;
  115.     virtual void setWordWrap( bool b );
  116.     bool wordWrap() const;
  117.  
  118.     EditType editType() const;
  119.     virtual QWidget *createEditor() const;
  120.     virtual void setContentFromEditor( QWidget *w );
  121.     virtual void setReplaceable( bool );
  122.     bool isReplaceable() const;
  123.  
  124.     virtual QString key() const;
  125.     virtual QSize sizeHint() const;
  126.  
  127.     virtual void setSpan( int rs, int cs );
  128.     int rowSpan() const;
  129.     int colSpan() const;
  130.  
  131.     virtual void setRow( int r );
  132.     virtual void setCol( int c );
  133.     int row() const;
  134.     int col() const;
  135.  
  136.     virtual void paint( QPainter *p, const QColorGroup &cg,
  137.                         const QRect &cr, bool selected );
  138.  
  139.     void updateEditor( int oldRow, int oldCol );
  140.  
  141.     virtual void setEnabled( bool b );
  142.     bool isEnabled() const;
  143.  
  144.     virtual int rtti() const;
  145.     static int RTTI;
  146.  
  147. private:
  148.     QString txt;
  149.     QPixmap pix;
  150.     QTable *t;
  151.     EditType edType;
  152.     uint wordwrap : 1;
  153.     uint tcha : 1;
  154.     uint enabled : 1;
  155.     int rw, cl;
  156.     int rowspan, colspan;
  157.  
  158. };
  159.  
  160. class Q_EXPORT QComboTableItem : public QTableItem
  161. {
  162. public:
  163.     QComboTableItem( QTable *table, const QStringList &list, bool editable = FALSE );
  164.     virtual QWidget *createEditor() const;
  165.     virtual void setContentFromEditor( QWidget *w );
  166.     virtual void paint( QPainter *p, const QColorGroup &cg,
  167.                         const QRect &cr, bool selected );
  168.     virtual void setCurrentItem( int i );
  169.     virtual void setCurrentItem( const QString &i );
  170.     int currentItem() const;
  171.     QString currentText() const;
  172.     int count() const;
  173.     QString text( int i ) const;
  174.     virtual void setEditable( bool b );
  175.     bool isEditable() const;
  176.     virtual void setStringList( const QStringList &l );
  177.  
  178.     int rtti() const;
  179.     static int RTTI;
  180.  
  181. private:
  182.     QComboBox *cb;
  183.     QStringList entries;
  184.     int current;
  185.     bool edit;
  186.     static QComboBox *fakeCombo;
  187.  
  188. };
  189.  
  190. class Q_EXPORT QCheckTableItem : public QTableItem
  191. {
  192. public:
  193.     QCheckTableItem( QTable *table, const QString &txt );
  194.     virtual QWidget *createEditor() const;
  195.     virtual void setContentFromEditor( QWidget *w );
  196.     virtual void paint( QPainter *p, const QColorGroup &cg,
  197.                         const QRect &cr, bool selected );
  198.     virtual void setChecked( bool b );
  199.     bool isChecked() const;
  200.  
  201.     int rtti() const;
  202.     static int RTTI;
  203.  
  204. private:
  205.     QCheckBox *cb;
  206.     bool checked;
  207.  
  208. };
  209.  
  210. #if defined(Q_TEMPLATEDLL)
  211. // MOC_SKIP_BEGIN
  212. template class Q_EXPORT QPtrVector<QTableItem>;
  213. template class Q_EXPORT QPtrVector<QWidget>;
  214. template class Q_EXPORT QPtrList<QTableSelection>;
  215. template class Q_EXPORT QIntDict<int>;
  216. // MOC_SKIP_END
  217. #endif
  218.  
  219.  
  220. class Q_EXPORT QTable : public QScrollView
  221. {
  222.     Q_OBJECT
  223.     Q_ENUMS( SelectionMode FocusStyle )
  224.     Q_PROPERTY( int numRows READ numRows WRITE setNumRows )
  225.     Q_PROPERTY( int numCols READ numCols WRITE setNumCols )
  226.     Q_PROPERTY( bool showGrid READ showGrid WRITE setShowGrid )
  227.     Q_PROPERTY( bool rowMovingEnabled READ rowMovingEnabled WRITE setRowMovingEnabled )
  228.     Q_PROPERTY( bool columnMovingEnabled READ columnMovingEnabled WRITE setColumnMovingEnabled )
  229.     Q_PROPERTY( bool readOnly READ isReadOnly WRITE setReadOnly )
  230.     Q_PROPERTY( bool sorting READ sorting WRITE setSorting )
  231.     Q_PROPERTY( SelectionMode selectionMode READ selectionMode WRITE setSelectionMode )
  232.     Q_PROPERTY( FocusStyle focusStyle READ focusStyle WRITE setFocusStyle )
  233.  
  234.     friend class QTableHeader;
  235.     friend class QComboTableItem;
  236.     friend class QCheckTableItem;
  237.     friend class QTableItem;
  238.  
  239. public:
  240.     QTable( QWidget* parent=0, const char* name=0 );
  241.     QTable( int numRows, int numCols,
  242.             QWidget* parent=0, const char* name=0 );
  243.     ~QTable();
  244.  
  245.     QHeader *horizontalHeader() const;
  246.     QHeader *verticalHeader() const;
  247.  
  248.     enum SelectionMode { Single, Multi, SingleRow, MultiRow, NoSelection };
  249.     virtual void setSelectionMode( SelectionMode mode );
  250.     SelectionMode selectionMode() const;
  251.  
  252.     virtual void setItem( int row, int col, QTableItem *item );
  253.     virtual void setText( int row, int col, const QString &text );
  254.     virtual void setPixmap( int row, int col, const QPixmap &pix );
  255.     virtual QTableItem *item( int row, int col ) const;
  256.     virtual QString text( int row, int col ) const;
  257.     virtual QPixmap pixmap( int row, int col ) const;
  258.     virtual void clearCell( int row, int col );
  259.  
  260.     virtual QRect cellGeometry( int row, int col ) const;
  261.     virtual int columnWidth( int col ) const;
  262.     virtual int rowHeight( int row ) const;
  263.     virtual int columnPos( int col ) const;
  264.     virtual int rowPos( int row ) const;
  265.     virtual int columnAt( int x ) const;
  266.     virtual int rowAt( int y ) const;
  267.  
  268.     virtual int numRows() const;
  269.     virtual int numCols() const;
  270.  
  271.     void updateCell( int row, int col );
  272.  
  273.     bool eventFilter( QObject * o, QEvent * );
  274.  
  275.     int currentRow() const { return curRow; }
  276.     int currentColumn() const { return curCol; }
  277.     void ensureCellVisible( int row, int col );
  278.  
  279.     bool isSelected( int row, int col ) const;
  280.     bool isRowSelected( int row, bool full = FALSE ) const;
  281.     bool isColumnSelected( int col, bool full = FALSE ) const;
  282.     int numSelections() const;
  283.     QTableSelection selection( int num ) const;
  284.     virtual int addSelection( const QTableSelection &s );
  285.     virtual void removeSelection( const QTableSelection &s );
  286.     virtual void removeSelection( int num );
  287.     virtual int currentSelection() const;
  288.  
  289.     bool showGrid() const;
  290.  
  291.     bool columnMovingEnabled() const;
  292.     bool rowMovingEnabled() const;
  293.  
  294.     virtual void sortColumn( int col, bool ascending = TRUE,
  295.                              bool wholeRows = FALSE );
  296.     bool sorting() const;
  297.  
  298.     virtual void takeItem( QTableItem *i );
  299.  
  300.     virtual void setCellWidget( int row, int col, QWidget *e );
  301.     virtual QWidget *cellWidget( int row, int col ) const;
  302.     virtual void clearCellWidget( int row, int col );
  303.  
  304.     virtual QRect cellRect( int row, int col ) const;
  305.  
  306.     virtual void paintCell( QPainter *p, int row, int col,
  307.                             const QRect &cr, bool selected );
  308.     virtual void paintCell( QPainter *p, int row, int col,
  309.                             const QRect &cr, bool selected, const QColorGroup &cg );
  310.     virtual void paintFocus( QPainter *p, const QRect &r );
  311.     QSize sizeHint() const;
  312.  
  313.     bool isReadOnly() const;
  314.     bool isRowReadOnly( int row ) const;
  315.     bool isColumnReadOnly( int col ) const;
  316.  
  317.     void setEnabled( bool b );
  318.  
  319.     void repaintSelections();
  320.  
  321.     enum FocusStyle { FollowStyle, SpreadSheet };
  322.     virtual void setFocusStyle( FocusStyle fs );
  323.     FocusStyle focusStyle() const;
  324.  
  325. public slots:
  326.     virtual void setNumRows( int r );
  327.     virtual void setNumCols( int r );
  328.     virtual void setShowGrid( bool b );
  329.     virtual void hideRow( int row );
  330.     virtual void hideColumn( int col );
  331.     virtual void showRow( int row );
  332.     virtual void showColumn( int col );
  333.  
  334.     virtual void setColumnWidth( int col, int w );
  335.     virtual void setRowHeight( int row, int h );
  336.  
  337.     virtual void adjustColumn( int col );
  338.     virtual void adjustRow( int row );
  339.  
  340.     virtual void setColumnStretchable( int col, bool stretch );
  341.     virtual void setRowStretchable( int row, bool stretch );
  342.     bool isColumnStretchable( int col ) const;
  343.     bool isRowStretchable( int row ) const;
  344.     virtual void setSorting( bool b );
  345.     virtual void swapRows( int row1, int row2, bool swapHeader = FALSE );
  346.     virtual void swapColumns( int col1, int col2, bool swapHeader = FALSE );
  347.     virtual void swapCells( int row1, int col1, int row2, int col2 );
  348.  
  349.     virtual void setLeftMargin( int m );
  350.     virtual void setTopMargin( int m );
  351.     virtual void setCurrentCell( int row, int col );
  352.     void clearSelection( bool repaint = TRUE );
  353.     virtual void setColumnMovingEnabled( bool b );
  354.     virtual void setRowMovingEnabled( bool b );
  355.  
  356.     virtual void setReadOnly( bool b );
  357.     virtual void setRowReadOnly( int row, bool ro );
  358.     virtual void setColumnReadOnly( int col, bool ro );
  359.  
  360.     virtual void setDragEnabled( bool b );
  361.     bool dragEnabled() const;
  362.  
  363.     virtual void insertRows( int row, int count = 1 );
  364.     virtual void insertColumns( int col, int count = 1 );
  365.     virtual void removeRow( int row );
  366.     virtual void removeRows( const QMemArray<int> &rows );
  367.     virtual void removeColumn( int col );
  368.     virtual void removeColumns( const QMemArray<int> &cols );
  369.  
  370.     virtual void editCell( int row, int col, bool replace = FALSE );
  371.  
  372. protected:
  373.     enum EditMode { NotEditing, Editing, Replacing };
  374.     void drawContents( QPainter *p, int cx, int cy, int cw, int ch );
  375.     void contentsMousePressEvent( QMouseEvent* );
  376.     void contentsMouseMoveEvent( QMouseEvent* );
  377.     void contentsMouseDoubleClickEvent( QMouseEvent* );
  378.     void contentsMouseReleaseEvent( QMouseEvent* );
  379.     void contentsContextMenuEvent( QContextMenuEvent * e );
  380.     void keyPressEvent( QKeyEvent* );
  381.     void focusInEvent( QFocusEvent* );
  382.     void focusOutEvent( QFocusEvent* );
  383.     void viewportResizeEvent( QResizeEvent * );
  384.     void showEvent( QShowEvent *e );
  385.     void setEditMode( EditMode mode, int row, int col );
  386. #ifndef QT_NO_DRAGANDDROP
  387.     virtual void contentsDragEnterEvent( QDragEnterEvent *e );
  388.     virtual void contentsDragMoveEvent( QDragMoveEvent *e );
  389.     virtual void contentsDragLeaveEvent( QDragLeaveEvent *e );
  390.     virtual void contentsDropEvent( QDropEvent *e );
  391.     virtual QDragObject *dragObject();
  392.     virtual void startDrag();
  393. #endif
  394.  
  395.     virtual void paintEmptyArea( QPainter *p, int cx, int cy, int cw, int ch );
  396.     virtual void activateNextCell();
  397.     virtual QWidget *createEditor( int row, int col, bool initFromCell ) const;
  398.     virtual void setCellContentFromEditor( int row, int col );
  399.     virtual QWidget *beginEdit( int row, int col, bool replace );
  400.     virtual void endEdit( int row, int col, bool accept, bool replace );
  401.  
  402.     virtual void resizeData( int len );
  403.     virtual void insertWidget( int row, int col, QWidget *w );
  404.     int indexOf( int row, int col ) const;
  405.  
  406.     void windowActivationChange( bool );
  407.     bool isEditing() const;
  408.     EditMode editMode() const;
  409.     int currEditRow() const;
  410.     int currEditCol() const;
  411.  
  412. protected slots:
  413.     virtual void columnWidthChanged( int col );
  414.     virtual void rowHeightChanged( int row );
  415.     virtual void columnIndexChanged( int section, int fromIndex, int toIndex );
  416.     virtual void rowIndexChanged( int section, int fromIndex, int toIndex );
  417.     virtual void columnClicked( int col );
  418.  
  419. signals:
  420.     void currentChanged( int row, int col );
  421.     void clicked( int row, int col, int button, const QPoint &mousePos );
  422.     void doubleClicked( int row, int col, int button, const QPoint &mousePos );
  423.     void pressed( int row, int col, int button, const QPoint &mousePos );
  424.     void selectionChanged();
  425.     void valueChanged( int row, int col );
  426.     void contextMenuRequested( int row, int col, const QPoint &pos );
  427. #ifndef QT_NO_DRAGANDDROP
  428.     void dropped( QDropEvent *e );
  429. #endif
  430.  
  431. private slots:
  432.     void doAutoScroll();
  433.     void doValueChanged();
  434.     void updateGeometriesSlot();
  435.  
  436. private:
  437.     void contentsMousePressEventEx( QMouseEvent* );
  438.     void drawContents( QPainter* );
  439.     void updateGeometries();
  440.     void repaintSelections( QTableSelection *oldSelection,
  441.                             QTableSelection *newSelection,
  442.                             bool updateVertical = TRUE,
  443.                             bool updateHorizontal = TRUE );
  444.     QRect rangeGeometry( int topRow, int leftCol,
  445.                          int bottomRow, int rightCol, bool &optimize );
  446.     void fixRow( int &row, int y );
  447.     void fixCol( int &col, int x );
  448.  
  449.     void init( int numRows, int numCols );
  450.     QSize tableSize() const;
  451.     void repaintCell( int row, int col );
  452.     void contentsToViewport2( int x, int y, int& vx, int& vy );
  453.     QPoint contentsToViewport2( const QPoint &p );
  454.     void viewportToContents2( int vx, int vy, int& x, int& y );
  455.     QPoint viewportToContents2( const QPoint &p );
  456.  
  457.     void updateRowWidgets( int row );
  458.     void updateColWidgets( int col );
  459.     bool isSelected( int row, int col, bool includeCurrent ) const;
  460.     void setCurrentCell( int row, int col, bool updateSelections );
  461.     void fixCell( int &row, int &col, int key );
  462.     void delayedUpdateGeometries();
  463.  
  464. private:
  465.     QPtrVector<QTableItem> contents;
  466.     QPtrVector<QWidget> widgets;
  467.     int curRow;
  468.     int curCol;
  469.     QTableHeader *leftHeader, *topHeader;
  470.     EditMode edMode;
  471.     int editCol, editRow;
  472.     QPtrList<QTableSelection> selections;
  473.     QTableSelection *currentSel;
  474.     QTimer *autoScrollTimer;
  475.     int lastSortCol;
  476.     bool sGrid : 1;
  477.     bool mRows : 1;
  478.     bool mCols : 1;
  479.     bool asc : 1;
  480.     bool doSort : 1;
  481.     bool mousePressed : 1;
  482.     bool readOnly : 1;
  483.     bool shouldClearSelection : 1;
  484.     bool dEnabled : 1;
  485.     bool context_menu : 1;
  486.     bool drawActiveSelection : 1;
  487.     bool was_visible : 1;
  488.     SelectionMode selMode;
  489.     int pressedRow, pressedCol;
  490.     QTablePrivate *d;
  491.     QIntDict<int> roRows;
  492.     QIntDict<int> roCols;
  493.     int startDragRow;
  494.     int startDragCol;
  495.     QPoint dragStartPos;
  496.     int oldCurrentRow, oldCurrentCol;
  497.     QWidget *topLeftCorner;
  498.     FocusStyle focusStl;
  499.     QSize cachedSizeHint;
  500.  
  501. };
  502.  
  503. #endif // QT_NO_TABLE
  504. #endif // TABLE_H
  505.